const { DataTypes } = require('sequelize');
const sequelize = require('../utils/database');
const { getDateTime } = require('../utils/date');

// 定义日志模型
const Log = sequelize.define(
  'log',
  {
    id: {
      type: DataTypes.STRING(36), // MySQL 中存储 UUID 的推荐方式
      defaultValue: DataTypes.UUIDV4,
      primaryKey: true,
      allowNull: false,
    },
    app: {
      type: DataTypes.STRING(36), // MySQL 中使用 VARCHAR 而不是 TEXT 作为索引
      allowNull: false,
      defaultValue: 'mspace', // 默认值为 'mspace'
    },
    level: {
      type: DataTypes.ENUM('debug', 'info', 'warn', 'error', 'fatal'),
      allowNull: false,
      defaultValue: 'info',
      // 日志级别
    },
    message: {
      type: DataTypes.STRING(255),
      allowNull: false,
      // 日志内容
    },
    metadata: {
      type: DataTypes.JSON,
      allowNull: true,
      // 附加元数据，可选
    },
  },
  {
    tableName: 'log',
    timestamps: true, // 启用自动时间戳
    createdAt: 'created_at', // 指定字段名
    updatedAt: 'updated_at', // 指定字段名
    indexes: [
      {
        fields: ['level'],
      },
      {
        fields: ['created_at'],
      },
    ],
  },
);

// 同步模型到数据库
(async () => {
  try {
    await Log.sync({ alter: true }); // 更改表结构（如果需要）
    console.log(getDateTime(), ': Log 表同步成功');
  } catch (error) {
    console.error(getDateTime(), ': Log 表同步失败:', error);
  }
})();

module.exports = Log;
